<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 
    let name = '张三';    // 这是声明了一个字符串
    let change = function () {   // 这是声明了一个函数
      console.log('change');    // 这是函数体
    };


    // 1.对象字面量增强写法
    let obj = {
      name: name,   // 属性名和属性值同名时，可以省略，比如直接写： name
      change: change,   // 属性名和属性值同名时，可以省略
      // 2.方法也可以省略
      // change: function () {
      //   console.log('change');
      // }
      // 3.函数的参数可以省略
      // change() {
      //   console.log('change');
      // }
      // 4.函数的参数可以省略，函数体可以省略
      change: () => {
        console.log('change');
      }
    }

    console.log(obj.name);
    obj.change();

    //1. Object.is判断两个值是否完全相等
    console.log(Object.is(1, 1));   // true
    console.log(Object.is(1, '1'));   // false
    console.log(Object.is(NaN, NaN));   // true

    //2. Object.assign 对象的合并
    const obj1 = { name: '张三', sex: '男' };
    const obj2 = { name: '李四', age: 18 };
    const obj3 = Object.assign(obj1, obj2);   // obj1和obj2合并到obj3，相同名字的属性，后面参数对象的属性会覆盖前面对象的属性
    console.log(obj3);    // { name: '李四', sex: '男', age: 18 }

    //3. Object.setPrototypeOf 设置原型对象        Object.getPrototypeof
    const ooo = { name: '张三' };
    const xxx = { test: ['aaa', 'bbb', 'ccc'] };
    Object.setPrototypeOf(ooo, xxx);
    console.log(ooo);   // { name: '张三', test: [ 'aaa', 'bbb', 'ccc' ] }
    console.log(Object.getPrototypeOf(ooo));    // { test: [ 'aaa', 'bbb', 'ccc' ] }


  </script>
</body>

</html>